package com.kaver.sso.def;

import java.io.Serializable;

import javax.validation.constraints.NotBlank;

import com.kaver.sso.def.enums.CodeEnum;

import lombok.Data;

/**
 * 返回结果
 *
 * @author: guopeng
 * @title 返回结果
 */
@Data
public class Result<T> implements Serializable {
	private static final long serialVersionUID = -5656456248064381256L;

	/**
	 * 返回码
	 */
	@NotBlank
	private String code;
	/**
	 * 消息
	 */
	@NotBlank
	private String msg;
	/**
	 * 数据
	 */
	private T data;

	public boolean isSuccess() {
		return CodeEnum.S_000000.getCode().equals(code) ? true : false;
	}

	/**
	 * 创建返回对象
	 */
	public static <T> Result<T> create(String code, String msg, T data) {
		Result<T> rt = new Result<>();
		rt.setCode(code);
		rt.setMsg(msg);
		rt.setData(data);
		return rt;
	}

	/**
	 * 创建成功返回对象
	 */
	public static <T> Result<T> createSuccess(T data) {

		return create(CodeEnum.S_000000.getCode(), CodeEnum.S_000000.getMsg(), data);
	}

	/**
	 * 创建成功返回对象
	 */
	public static <T> Result<T> createSuccess() {
		return createSuccess(null);
	}

	/**
	 * 创建失败返回对象
	 */
	public static <T> Result<T> createError(String code, String msg) {
		return create(code, msg, null);
	}

	/**
	 * 创建失败返回对象
	 */
	public static <T> Result<T> createError(BizException e) {
		return createError(e.getCode(), e.getMessage());
	}

	/**
	 * 创建失败返回对象
	 */
	public static <T> Result<T> createError(CodeEnum e) {
		return createError(e.getCode(), e.getMsg());
	}

	/**
	 * 创建系统异常返回对象
	 */
	public static <T> Result<T> createSysError() {
		return createError(CodeEnum.F_999999);
	}

	/**
	 * 创建服务不可用返回对象
	 */
	public static <T> Result<T> createServiceUnavailable() {
		return createError(CodeEnum.F_999998);
	}
}
